"""
@author: ty
@file: lianxi.py
@time: 2022/11/25 11:35
"""
# 1、输入数字n，输出n天前的日期（time或者datetime模块）
# import datetime
# day = int(input("请输入要查看多少天前:"))
# today = datetime.datetime.now()
# delateday = datetime.timedelta(days=-day)
# wantday = (today+delateday).strftime("%Y/%m/%d")
# print(wantday)

# 2、输出指定文件夹下有哪些文件或文件夹（实现ls命令， os）
# import os
# def ls(path):
#     for i in os.listdir(path):
#         print(i)
# ls("D:/sanchuang/python/python project/2022-11-24模块和包")

# 3、列表去重，并且从小到大排序
# a = [1,4,2,23,4,13,2,4,34,11,11,4,3,2,2]
# list1 = sorted(list(set(a)))
# print(list1)

# 4、如何在一个函数内部修改全局变量
# 在函数内部加上global关键字修饰a，再修改a的值
# 如果是字典或者列表等，不需要使用global关键字，直接修改就行

# 5、如何跨模块共享全局变量
#   把全局变量都写在一个模块文件中，
#   使用的时候导入即可

# 6、python的基本数据类型有哪些？
#   整数、浮点数、复数、字符串、布尔、NoneType、列表、元组、字典、集合

# 7、python中生成随机整数（1-10），随机小数（1-10），随机小数（0-1）的方法
# import random
# int1 = random.randint(1,10)
# float1 = random.uniform(1,10)
# float2 = random.random()
# print(int1,float1,float2)

# 8、python中哪些是可变数据类型，哪些是不可变数据类型

# 不可变数据类型:bool布尔类型、int整型、float浮点型、complex复数,string字符串类型,元组类型
# 可变数据类型:列表,字典,集合类型

# 9、a+=1与a=a+1有什么区别
# a+=1  是对原变量进行加1 内存地址不会变
# a=a+1 是有了一个新变量 只是新变量的名字还是叫a  内存地址会变

# 10、什么是pep8？说出5点它的标准
# pep8是python指定的唯一一种编码规范
# 1、使用4个空格缩进，不要使用制表符
# 2、使用拆行符（\）以确保每行不会超过79个字符
# 3、一级类或者方法之间空2行，二级类和方法之间空1行，大块代码也空1行
# 4、注释
# 单行注释：若注释独占一行，# 号顶头，空1格后写注释；若是行尾注释，空2格后 # 号再空1格写注释
# 多行注释：三对双引号（推荐使用）和三对单引号
# 5、运算符周围和逗号后面使用空格，但是括号里侧不加空格，作为参数时符号周围不加空格
# 6、命名
# 类命名，使用大驼峰命名（不使用下划线、数字）；
# 方法命名，全小写字符或者下划线；
# 常量命名，以大写字母开头，全部大写字母或下划线或数字
# 7、导入顺序为:先导入python包，再导入第三方包，最后导入自定义的包。


# 11、给定一个字符串，找出字符串第一个重复的字符
# a = "rgverhgdsdhnhiuuow"
# for i in a:
#     c = a.count(i)
#     if c>=2:
#         break
# print("第一个重复的字符是：",i)

# 12、简述深拷贝与浅拷贝
# 浅拷贝，指的是重新分配一块内存，创建一个新的对象，但里面的元素是原对象中各个子对象的引用。
# 是对原对象值的拷贝，地址仍然指向原对象的地址，原对象的值发生变化，拷贝对象的值也会随着改变
#
# 深拷贝，是指重新分配一块内存，创建一个新的对象，并且将原对象中的元素，以递归的方式，通过创建新的子对象拷贝到新对象中。
# 因此，新对象和原对象没有任何关联。
# 是拷贝了一份与原对象不同地址的对象，修改对象中的任何值，都不会改变深拷贝的对象的值

# 13、简述python内存机制
# 1、引用计数
# 在python中，每个对象都会包含一个头部信息，这个头部信息包括：类型标识符和引用计数器！
# 2、垃圾回收
# 当python对象的引用计数为0时，python解释器会对这个对象进行垃圾回收
# 3、内存池机制
# 14、使用python实现冒泡排序，快速排序

# # 冒泡排序
# a = [1, 34, 2, 45, 35, 322, 5, 667, 3, 6, 127, 3]
# for i in range(len(a)):
#     for j in range(0, len(a)-1-i):
#         # 将列表前后两个数进行比较，大的放后面小的放前面
#         # len(a)-1-i 剔除比对完的顶端数（最大/最小）,同时可以防止n+1超出下标界限
#         if a[j] > a[j+1]:
#             a[j], a[j+1] = a[j+1], a[j]
# print(a)
#
# # 快速排序
#
# def quick_sort(data):
#     """快速排序"""
#     if len(data) >= 2:  # 递归入口及出口
#         mid = data[len(data) // 2]  # 选取基准值，也可以选取第一个或最后一个元素
#         left, right = [], []  # 定义基准值左右两侧的列表
#         data.remove(mid)  # 从原始数组中移除基准值
#         for num in data:
#             if num >= mid:
#                 right.append(num)
#             else:
#                 left.append(num)
#         return quick_sort(left) + [mid] + quick_sort(right)
#     else:
#         return data
#
# print(quick_sort([1, 3, 54, 546, 642, 32, 534, 23, 5]))

# 15、验证一个字符串是否属于回文（从左到右，从右到左都是一样）
# str = input("请输入一个字符串:")
# for i in str:
#     if str[::-1] == str[::1]:
#         print("是一个回文")
#     else:
#         print("不是一个回文")
#     break